\documentclass[a4paper,11pt]{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\NoAutoSpaceBeforeFDP

\usepackage{microtype}

\usepackage{lmodern}
\usepackage[bitstream-charter]{mathdesign}

\usepackage[margin=2cm]{geometry}

\usepackage{color}
\definecolor{blue}{rgb}{0.38,0.58,0.81}
\definecolor{grey1}{rgb}{0.93,0.93,0.93}
\definecolor{grey2}{rgb}{0.73,0.74,0.71}

\usepackage{hyperref}
\hypersetup{
   pdftitle={Contraintes pour l'aide à la décision},
   pdfsubject={Projet n\up{o} 2 : Composition musicale},
   pdfauthor={Simon ARVAUX, Damien GOMBAULT},
   colorlinks,
   citecolor=black,
   filecolor=black,
   linkcolor=black,
   urlcolor=blue
}

\usepackage[pdftex]{graphicx}
\usepackage{multicol}

\usepackage{listings}
\lstset{
   tabsize=1,
   frame=single,
   breaklines=true,
   basicstyle=\ttfamily \small,
   rulecolor=\color{grey2},
   backgroundcolor=\color{grey1},
   framexleftmargin=1em,
   xleftmargin=2em,
   xrightmargin=1em
}

\usepackage{wrapfig}

\begin{document}

\thispagestyle{empty}

\begin{center}
\vspace*{\fill}

\hrule
\vspace{1cm}
{\Huge \textbf{Contraintes pour l'aide à la décision}\\}
{\LARGE Projet n\up{o} 2 : Composition musicale\\}
\vspace{1cm}
\hrule

\vspace{2cm}
\includegraphics[width=5cm]{includes/jpg/logo-univ.jpg}
\vspace{2cm}

\begin{multicols}{2}
{\Large
\textbf{Étudiants}\\
Simon ARVAUX\\
Damien GOMBAULT\\
}
\vspace{2cm}
{\Large
\textbf{Professeur}\\
Denys DUCHIER\\
}
\end{multicols}

\vspace{4cm}

\large{
\textbf{Master 2 IRAD}\\
Année 2008--2009\\}

\vspace*{\fill}
\end{center}

\newpage

\renewcommand{\contentsname}{Sommaire}
\setcounter{tocdepth}{3}
\tableofcontents
\newpage

\section{Introduction}

Ce projet a été réalisé dans le cadre du cours de contraintes pour l'aide à la
décision. Il consiste à écrire un programme pour générer des compositions
musicales décrites par des contraintes.

\section{Description}

Le programme a été développé en \textbf{C++}. Il utilise la bibliothèque
\textbf{Qt}\footnote{\url{http://trolltech.com/products/appdev}} pour
l'interface graphique et la bibliothèque
\textbf{Gecode}\footnote{\url{http://www.gecode.org/}} pour les contraintes.

\subsection{Fonctionnalités}

\begin{itemize}
\item Interface :
  \begin{itemize}
  \item Affichage sous forme de partition des mélodies composées
  \item Possibilité d'écouter les mélodies composées
  \item Exportation des mélodies au format \textbf{MIDI} et
  \textbf{LilyPond}\footnote{\url{http://lilypond.org/}}
  \item Exportation des partitions au format \textbf{PDF}
  \item Possibilité d'enregistrer et charger les configurations des contraintes
  \item Choix du tempo (pour la lecture des fichiers MIDI)
  \end{itemize}
\item Contraintes :
  \begin{itemize}
  \item Choix du nombre de notes de la partition
  \item Choix du nombre d'octaves
  \item Choix du mode et de la tonalité
  \item Choix du degré de la première note
  \item Possibilité de définir un motif
  \item Génération rapide de gammes
  \item Divers : avoir uniquement des notes conjointes, ne pas avoir de notes
  répétées
  \end{itemize}
\end{itemize}

\subsection{Contenu de l'archive}

\begin{itemize}
\item \texttt{/doc/} : contient ce document
\item \texttt{/qm/} : contient le fichier compilé \textit{Qt Linguist} pour la langue française
\item \texttt{/src/} : 
  \begin{itemize}
  \item \texttt{/src/core/} : contient les sources C++ des classes principales de
  l'application (contraintes, exportation au format LilyPond, \dots)
  \item \texttt{/src/gui/} : contient les sources C++ des classes de l'interface
  graphique
  \end{itemize}
\end{itemize}

\section{Installation}

\subsection{Pré-requis}

Le programme a besoin des éléments suivants pour fonctionner :
\begin{itemize}
\item \textbf{Qt 4} (\textit{runtimes} et fichiers de développement) : le
logiciel a été testé avec la version \textbf{4.4.3}.
\item \textbf{Gecode} (\textit{runtimes} et fichiers de développement) : le
logiciel a été testé avec la version \textbf{2.2.0}.
\item \textbf{LilyPond} : le logiciel a été testé avec la version
\textbf{2.10.33}.
\item \textbf{TiMidity++} : le logiciel a été testé avec la version
\textbf{2.13.2}.
\item \textbf{ImageMagick} : le logiciel a été testé avec la version
\textbf{6.3.7}.\\
\end{itemize}

Les bibliothèques nécessaires à la compilation doivent être immédiatement
trouvables par \textbf{GCC}. Il est donc recommandé d'utiliser le gestionnaire
de paquets de votre distribution pour les installer. Certaines distributions
séparent les \textit{runtimes} et les fichiers de développement en plusieurs
paquets. Les fichiers de développement sont souvent contenus dans des paquets
qui possèdent \textbf{-dev} comme suffixe.\\

Si vous ne souhaitez pas utiliser le gestionnaire de paquets, il est vivement
recommandé d'installer les bibliothèques en utilisant un préfixe standard
d'installation comme \texttt{/usr} par exemple.\\

Pour que le programme fonctionne convenablement, les exécutables
\texttt{lilypond}, \texttt{timidity}  et \texttt{mogrify} des logiciels cités
ci-dessus doivent se trouver dans un répertoire du \texttt{PATH}. Il est donc
également recommandé d'utiliser le gestionnaire de paquets de votre distribution
pour les installer. \\

Si vous ne souhaitez pas utiliser le gestionnaire de paquet, vous devez modifier
votre variable d'environnement \texttt{PATH}.\\

Le programme n'a été testé que sous \textbf{Linux} mais il devrait également
être fonctionnel sous \textbf{Windows} (avec peut-être quelques modifications).

\subsection{Compilation}

Une fois les pré-requis installés, vous pouvez passer à l'étape de
compilation.\\

Décompressez l'archive et ouvrez-y un terminal. Créez ensuite le fichier
\texttt{Makefile} en utilisant l'outil \texttt{qmake} :

\begin{lstlisting}
$ qmake
\end{lstlisting}

Lancez ensuite la compilation via la commande \texttt{make} :

\begin{lstlisting}
$ make
\end{lstlisting}

S'il n'y a pas d'erreur, le programme est prêt à être utilisé, sinon vérifiez
votre configuration.

\section{Utilisation}

\subsection{Lancement}

Vous pouvez ensuite lancer le logiciel en utilisant la commande suivante :

\begin{lstlisting}
$ ./projet
\end{lstlisting}

Vous pouvez également cliquer sur le fichier \texttt{projet} si votre
gestionnaire de fichiers vous permet d'exécuter directement les exécutables
en cliquant simplement dessus.\\

Vous devriez obtenir quelque chose de similaire à l'image suivante :

\begin{center}
\includegraphics[scale=0.6]{includes/png/1.png}
\end{center}

\subsection{Description de l'interface}

L'interface est séparée en 3 grandes parties.

\paragraph{Les menus} 

Ils permettent d'exporter la mélodie, la partition, de configurer
les paramètres, \dots{} Ils seront détaillés plus loin dans le document.

\paragraph{La partie centrale} 

Elle permet de visualiser la mélodie générée sous forme de
partition. Si la partition est trop grande pour tenir sur une seule page, vous
pouvez utiliser les boutons situés en dessous la partition pour naviguer entre
les différentes pages :

\begin{center}
\includegraphics[scale=0.6]{includes/png/2.png}
\end{center}

La position courante et le nombre de pages sont également indiqués.

\pagebreak

\paragraph{La partie droite}

Elle permet de visualiser rapidement les paramètres choisis,
de générer la mélodie et de lancer son écoute :\\

\begin{center}
\includegraphics[scale=0.6]{includes/png/3.png}
\end{center}

\subsection{Description des menus et des actions}

Voici la liste des actions du menu \textit{Fichier}.

\subsubsection{Menu \textit{Fichier}}

\paragraph{Nouveau} Permet de réinitialiser les paramètres pour créer une nouvelle
mélodie. Les paramètres par défaut seront alors utilisés lors de la génération
de la prochaine mélodie.

\paragraph{Enregistrer les paramètres} Permet d'enregistrer les paramètres actuels
dans un fichier de configuration.

\paragraph{Charger les paramètres} Permet de charger les paramètres à partir
d'un fichier de configuration.

\paragraph{Exporter le fichier LilyPond} Permet d'exporter la mélodie actuelle dans
un fichier au format LilyPond.

\paragraph{Exporter le fichier MIDI} Permet d'exporter la mélodie actuelle dans un
fichier au format MIDI.

\paragraph{Exporter le fichier PDF} Permet d'exporter la partition actuelle dans un
fichier au format PDF.

\paragraph{Quitter} Quitte l'application. N'oubliez pas d'enregistrer votre
configuration ou d'exporter les fichiers qui vous intéressent.

\subsubsection{Menu \textit{Paramètres}}

Ce menu permet principalement de spécifier des contraintes sur la mélodie. Par
défaut la mélodie est entièrement générée de façon aléatoire. Le résultat
obtenu n'est donc par forcément très intéressant ni agréable à écouter.\\

Voici un exemple de mélodie aléatoire générée avec les paramètres par défaut :

\vspace{-1cm}
\begin{center}
\includegraphics[scale=0.8]{includes/pdf/random-crop.pdf}
\end{center}

Le menu \textit{Paramètres} permet donc en spécifiant des contraintes d'obtenir
des mélodies plus intéressantes. Voici donc la liste des actions de ce menu.

\paragraph{Partition}

Permet de configurer le nombre de notes de la mélodie et le nombre d'octaves
autorisées.

\begin{center}
\includegraphics[scale=0.6]{includes/png/4.png}
\end{center}

Le nombre de notes doit être un multiple de 8 : la mélodie générée
est uniquement composées de croches et il y a 8 croches dans une mesure à 4
temps.\\

Une octave va de la note \textbf{do} à la note \textbf{si} :

\begin{center}
\includegraphics[scale=0.3]{includes/png/clavier.png}
\end{center}

\paragraph{Tempo}

Permet de configurer le tempo de la mélodie. Le tempo a uniquement une influence
lors de l'écoute de la mélodie générée ou de l'exportation au format MIDI.

\begin{center}
\includegraphics[scale=0.6]{includes/png/5.png}
\end{center}

\paragraph{Tonalité et mode}

La contrainte de tonalité et de mode est une contrainte importante. La tonalité
est l'ensemble des lois qui régissent la constitution des gammes. Dans un sens
plus restreint, la tonalité exprime l'ensemble des sons formant une gamme
diatonique.\\

Cette contrainte permet donc de choisir la gamme dans laquelle on souhaite
composer la mélodie. Il est possible de choisir n'importe quelle gamme des modes
\textbf{majeurs} et \textbf{mineurs}.\\

\begin{center}
\includegraphics[scale=0.6]{includes/png/6.png}
\end{center}

Voici un exemple de mélodie générée dans la gamme de \textbf{sol majeur} :

\vspace{-1cm}
\begin{center}
\includegraphics[scale=0.8]{includes/pdf/sol-majeur-crop.pdf}
\end{center}

Vous pouvez remarquer la présence du \textbf{fa dièse} à l'armure.\\

Voici un exemple de mélodie générée dans la gamme de \textbf{ré mineur} :

\vspace{-1cm}
\begin{center}
\includegraphics[scale=0.8]{includes/pdf/re-mineur-crop.pdf}
\end{center}

Vous pouvez remarquer la présence du \textbf{si bémol} à l'armure ainsi que la
note sensible de cette gamme, le \textbf{do dièse}.\\

Cette contrainte permet ainsi d'obtenir des mélodies déjà plus intéressantes et
agréable à l'oreille.

\paragraph{Gammes}

Permet d'obtenir rapidement des gammes. Vous devez tout d'abord choisir une
tonalité et un mode avant de pouvoir obtenir une gamme.

\subparagraph{Ascendante}

Configure automatiquement les paramètres afin d'obtenir une gamme ascendante.\\

Voici par exemple la gamme ascendante obtenue lors que l'on sélectionne la
tonalité de \textbf{do majeur} :

\vspace{-1cm}
\begin{center}
\includegraphics[scale=0.8]{includes/pdf/do-up-crop.pdf}
\end{center}

\subparagraph{Descendante}

Configure automatiquement les paramètres afin d'obtenir une gamme descendante.\\

Voici par exemple la gamme descendante obtenue lors que l'on sélectionne la
tonalité de \textbf{do majeur} :

\vspace{-1cm}
\begin{center}
\includegraphics[scale=0.8]{includes/pdf/do-down-crop.pdf}
\end{center}

\paragraph{Degré de la première note}

Chaque son peut-être le point de départ, la première note d'une gamme.  Chaque
degré, quelque soit le nom de la note qui le représente, possède un nom
particulier qui caractérise la position qu'il occupe dans la gamme et la
fonction qu'il y remplit.

\begin{center}
\includegraphics[scale=0.6]{includes/png/7.png}
\end{center}

\begin{itemize}
\item Le 1\ier{} degré se nomme tonique.
\item Le 2\ieme{} degré se nomme sus-tonique.
\item Le 3\ieme{} degré se nomme médiante.
\item Le 4\ieme{} degré se nomme sous-dominante.
\item Le 5\ieme{} degré se nomme dominante.
\item Le 6\ieme{} degré se nomme sus-dominante.
\item Le 7\ieme{} degré se nomme sensible.\\
\end{itemize}

Cette contrainte permet de définir le degré de la première note de la mélodie.\\

Voici par exemple une mélodie générée dans la gamme de \textbf{do majeur} qui commence
sur le \textbf{5}\ieme{} degré (ici \textbf{sol}) :

\vspace{-1cm}
\begin{center}
\includegraphics[scale=0.8]{includes/pdf/degre-crop.pdf}
\end{center}

\paragraph{Motif}

Cette contrainte permet de spécifier un motif pour la mélodie.

\begin{center}
\includegraphics[scale=0.6]{includes/png/8.png}
\end{center}

\subparagraph{Motif simple}

Cette contrainte permet de spécifier un motif selon le \textbf{code
Parsons}\footnote{\url{http://fr.wikipedia.org/wiki/Code\_Parsons}}.\\

Ce code n'utilise que trois signes : les lettres \textbf{U}, \textbf{D} et
\textbf{R}, respectivement pour \textbf{Up}, \textbf{Down} et \textbf{Repeat}.
Une note s'écrit \textbf{U} si elle est plus haute que la précédente, \textbf{D}
si elle est plus basse, \textbf{R} si elle est du même niveau.\\

Le motif est automatiquement répété jusqu'à la fin de la mélodie.

\subparagraph{Motif avancé}

Il est également possible de spécifier un nombre après la lettre \textbf{U} ou
la lettre \textbf{D}. Ce nombre correspond à la taille maximale (en tons) de
l'intervalle qui séparent les deux notes. Par exemple, si la note précédente est
\textbf{do} et que la note s'écrit U3, alors elle peut être \textbf{ré},
\textbf{mi} ou \textbf{fa} (dans la gamme de do majeur).\\

Si vous utilisez un motif avancé, toutes lettres \textbf{U} et \textbf{D}
doivent être suivies d'un nombre. La lettre \textbf{R} n'est jamais suivi d'un
nombre.

\paragraph{Divers}

Permet de n'avoir que des notes conjointes et permet également de ne pas avoir
de note répétée. Deux notes conjointes sont séparées d'un ton ou d'un
demi-ton.

\begin{center}
\includegraphics[scale=0.6]{includes/png/9.png}
\end{center}

Voici par exemple, une mélodie dont les notes sont conjointes et qui ne contient
pas de note répétée :

\vspace{-1cm}
\begin{center}
\includegraphics[scale=0.8]{includes/pdf/conjoint-crop.pdf}
\end{center}

\subsubsection{Menu \textit{Aide}}

Voici la liste des actions du menu \textit{Aide}.

\paragraph{À propos}

Affiche une boîte de dialogue contenant des informations sur le logiciel.

\end{document}

